/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Base;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Alina
 */
public class ReportesDB {

    public DefaultTableModel reporteAlumnos(DefaultTableModel modelo,String cadena) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta=null;
        if(cadena.equals(" ORDER BY"))
        {
        consulta="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))";
        }
        else
        {
        cadena=cadena.substring(0, cadena.length()-1);

        consulta="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))" + cadena;
        
        }
        
        ResultSet resultado = stmt.executeQuery(consulta);
        
        while (resultado.next()) 
        {
            Object nuevo[] = {resultado.getString("FACULTAD"),resultado.getString("ESCUELA"),resultado.getString("CEDULA"),resultado.getString("NOMBRES"),resultado.getString("APELLIDOS"),resultado.getString("METODO_CONTACTO"),resultado.getString("CONTACTO"),resultado.getString("CONTACTADO")}; //esto es por las tres columnas aunque puede variar
                
            modelo.addRow(nuevo);
            
        
        }
        
        var.commit();
        db.getConnection().close();
        return modelo;
    }
    
        public DefaultTableModel reportePorCedula(DefaultTableModel modelo,String ced_alumno,String cadena) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta1;
        if(cadena.equals(" ORDER BY"))
        {
         consulta1="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND EXALUMNO.CEDULA_EXALUMNO='"+ced_alumno+"' AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))";
         }
        else
        {
            cadena=cadena.substring(0, cadena.length()-1);
        consulta1="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND EXALUMNO.CEDULA_EXALUMNO='"+ced_alumno+"' AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))"+cadena;
         
        }    
        ResultSet resultado = stmt.executeQuery(consulta1);
        
        while (resultado.next()) 
        {
            Object nuevo[] = {resultado.getString("FACULTAD"),resultado.getString("ESCUELA"),resultado.getString("CEDULA"),resultado.getString("NOMBRES"),resultado.getString("APELLIDOS"),resultado.getString("METODO_CONTACTO"),resultado.getString("CONTACTO"),resultado.getString("CONTACTADO")}; //esto es por las tres columnas aunque puede variar
                
            modelo.addRow(nuevo);

        }
        db.getConnection().close();
        return modelo;
    }
        
       public DefaultTableModel reportePorNombre(DefaultTableModel modelo,String nombre,String cadena) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta1;
        if(cadena.equals(" ORDER BY"))
        {
        consulta1="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND PERSONA.NOMBRE LIKE '%" + nombre+ "%' AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))";
                }
        else
        {
            cadena=cadena.substring(0, cadena.length()-1);
            consulta1="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND PERSONA.NOMBRE LIKE '%" + nombre+ "%' AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))"+ cadena;        
        
        }
        
        ResultSet resultado = stmt.executeQuery(consulta1);
        
        while (resultado.next()) 
        {
            Object nuevo[] = {resultado.getString("FACULTAD"),resultado.getString("ESCUELA"),resultado.getString("CEDULA"),resultado.getString("NOMBRES"),resultado.getString("APELLIDOS"),resultado.getString("METODO_CONTACTO"),resultado.getString("CONTACTO"),resultado.getString("CONTACTADO")}; //esto es por las tres columnas aunque puede variar
                
            modelo.addRow(nuevo);
 

        }
        var.commit();
        db.getConnection().close();
        return modelo;
    }
       
    public DefaultTableModel reportePorApellido(DefaultTableModel modelo,String apellido,String cadena) throws SQLException {
        
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta1;
        if(cadena.equals(" ORDER BY")) 
        {
        consulta1="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND PERSONA.APELLIDO LIKE '%" + apellido+ "%' AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))";        
        }
        else
        {
            cadena=cadena.substring(0, cadena.length()-1);
        consulta1="SELECT FACULTAD,ESCUELA,CEDULA, NOMBRES,APELLIDOS, METODO_CONTACTO,CONTACTO,CONTACTADO FROM (SELECT FACULTAD, ESCUELA, VISTA1.CEDULA, VISTA1.NOMBRES, VISTA1.APELLIDOS,CASE METODO WHEN 1 THEN 'TELEFONO' WHEN 2 THEN 'CORREO' WHEN 3 THEN 'OTRO' END METODO_CONTACTO, CASE CONTACTO WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END CONTACTADO FROM (SELECT * FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA, PERSONA.CEDULA CEDULA, PERSONA.NOMBRE NOMBRES, APELLIDO APELLIDOS FROM PERSONA, EXALUMNO, TITULO_EXALUMNO, TITULO_ESCUELA,ESCUELA,FACULTAD, ESCUELA_FACULTAD WHERE PERSONA.CEDULA=EXALUMNO.CEDULA_EXALUMNO AND PERSONA.APELLIDO LIKE '%" + apellido+ "%' AND PERSONA.CEDULA=TITULO_EXALUMNO.CEDULA AND TITULO_EXALUMNO.ID_TITULO=TITULO_ESCUELA.ID_TITULO AND TITULO_ESCUELA.ID_ESCUELA=ESCUELA.ID_ESCUELA AND ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD.ID_FACULTAD=FACULTAD.ID_FACULTAD) NATURAL LEFT OUTER JOIN METODO) VISTA1) NATURAL LEFT OUTER JOIN (SELECT * FROM (SELECT CEDULA,NUMERO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=1) NATURAL LEFT OUTER JOIN (SELECT *  FROM TELEFONO_PERSONA WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, CORREO CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=2) NATURAL LEFT OUTER JOIN (SELECT *  FROM PERSONA_CORREO WHERE PRINCIPAL=1)) UNION (SELECT CEDULA, DESCRIPCION CONTACTO FROM (SELECT CEDULA,METODO FROM EXALUMNO,METODO WHERE CEDULA=CEDULA_EXALUMNO AND METODO=3) NATURAL LEFT OUTER JOIN (SELECT * FROM PERSONA_OTRO)))" + cadena;        
        
        }
        
        ResultSet resultado = stmt.executeQuery(consulta1);
        
        while (resultado.next()) 
        {
            Object nuevo[] = {resultado.getString("FACULTAD"),resultado.getString("ESCUELA"),resultado.getString("CEDULA"),resultado.getString("NOMBRES"),resultado.getString("APELLIDOS"),resultado.getString("METODO_CONTACTO"),resultado.getString("CONTACTO"),resultado.getString("CONTACTADO")}; //esto es por las tres columnas aunque puede variar
                
            modelo.addRow(nuevo);
        
        }
        var.commit();
        db.getConnection().close();
        return modelo;
    }
    
    public ArrayList<String> listarFacultades() throws SQLException{
        
        ArrayList<String> lista=new ArrayList();
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta="SELECT NOMBRE FROM FACULTAD";
        ResultSet resultado=stmt.executeQuery(consulta);
        
        while (resultado.next())
        {
            lista.add((resultado.getString("NOMBRE")));
        }
        var.commit();
        db.getConnection().close();
        return lista;
    }
    
    public ArrayList<String> listarEscuelas(String facultad) throws SQLException{

        ArrayList<String> lista=new ArrayList();
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();   
        String consulta="SELECT ESCUELA.NOMBRE FROM ESCUELA,ESCUELA_FACULTAD,FACULTAD WHERE FACULTAD.NOMBRE='"+facultad+"' AND FACULTAD.ID_FACULTAD=ESCUELA_FACULTAD.ID_FACULTAD AND ESCUELA_FACULTAD.ID_ESCUELA=ESCUELA.ID_ESCUELA";
        ResultSet resultado=stmt.executeQuery(consulta);
        while (resultado.next())
        {
            lista.add(resultado.getString("NOMBRE"));
        }
        var.commit();
        db.getConnection().close();
        return lista;
    }
    
    public DefaultTableModel reportePorEscuela(DefaultTableModel modelo) throws SQLException{
        Double contactados;
        Double encuestados;
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta="SELECT FACULTAD,ESCUELA,NUM_ESTUDIANTES, (CONTACTADOS*100)/NUM_ESTUDIANTES E_CONTACTADOS, (ENCUESTADOS*100)/NUM_ESTUDIANTES ENCUESTADOS FROM (SELECT FACULTAD,ESCUELA,COUNT(CEDULA) NUM_ESTUDIANTES FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA,TITULO_EXALUMNO.CEDULA CEDULA FROM ESCUELA,ESCUELA_FACULTAD,FACULTAD,TITULO_EXALUMNO,TITULO_ESCUELA WHERE ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD. ID_FACULTAD=FACULTAD.ID_FACULTAD AND ESCUELA.ID_ESCUELA=TITULO_ESCUELA.ID_ESCUELA AND TITULO_ESCUELA.ID_TITULO=TITULO_EXALUMNO.ID_TITULO) GROUP BY FACULTAD,ESCUELA) NATURAL FULL OUTER JOIN (SELECT FACULTAD,ESCUELA,COUNT(CEDULA) CONTACTADOS FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA,TITULO_EXALUMNO.CEDULA CEDULA FROM ESCUELA,ESCUELA_FACULTAD,FACULTAD,TITULO_EXALUMNO,TITULO_ESCUELA,METODO WHERE ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD. ID_FACULTAD=FACULTAD.ID_FACULTAD AND ESCUELA.ID_ESCUELA=TITULO_ESCUELA.ID_ESCUELA AND TITULO_ESCUELA.ID_TITULO=TITULO_EXALUMNO.ID_TITULO AND TITULO_EXALUMNO.CEDULA=METODO.CEDULA AND CONTACTO=1 ) GROUP BY FACULTAD,ESCUELA) "
                + "NATURAL FULL OUTER JOIN (SELECT FACULTAD,ESCUELA,COUNT(CEDULA) ENCUESTADOS FROM (SELECT FACULTAD.NOMBRE FACULTAD, ESCUELA.NOMBRE ESCUELA,TITULO_EXALUMNO.CEDULA CEDULA FROM ESCUELA,ESCUELA_FACULTAD,FACULTAD,TITULO_EXALUMNO,TITULO_ESCUELA,EXALUMNO_ENCUESTAE WHERE ESCUELA.ID_ESCUELA=ESCUELA_FACULTAD.ID_ESCUELA AND ESCUELA_FACULTAD. ID_FACULTAD=FACULTAD.ID_FACULTAD AND ESCUELA.ID_ESCUELA=TITULO_ESCUELA.ID_ESCUELA AND TITULO_ESCUELA.ID_TITULO=TITULO_EXALUMNO.ID_TITULO AND TITULO_EXALUMNO.CEDULA=EXALUMNO_ENCUESTAE.CEDULA_EXALUMNO ) GROUP BY FACULTAD,ESCUELA) ORDER BY FACULTAD,ESCUELA,NUM_ESTUDIANTES";
        ResultSet resultado=stmt.executeQuery(consulta);
        
        while (resultado.next())
        {
            contactados=getDecimal(2,resultado.getDouble("E_CONTACTADOS"));
            encuestados=getDecimal(2,resultado.getFloat("ENCUESTADOS"));
            Object nuevo[]={resultado.getString("FACULTAD"),resultado.getString("ESCUELA"),resultado.getString("NUM_ESTUDIANTES"),contactados,encuestados};
            modelo.addRow(nuevo);
        }
        db.getConnection().close();
        return modelo;
    }
    
    public DefaultTableModel reportePorFacultad(DefaultTableModel modelo) throws SQLException{
        Double contactados;
        Double encuestados;
        DatabaseManager db = new DatabaseManager();
        Connection var = db.getConnection();
        Statement stmt = var.createStatement();
        String consulta="SELECT FACULTAD, NUM_ESTUDIANTES, (CONTACTADOS*100)/NUM_ESTUDIANTES E_CONTACTADOS, (ENCUESTADOS*100)/NUM_ESTUDIANTES ENCUESTADOS FROM (SELECT FACULTAD,COUNT(CEDULA) NUM_ESTUDIANTES FROM (SELECT FACULTAD.NOMBRE FACULTAD,TITULO_EXALUMNO.CEDULA CEDULA FROM ESCUELA_FACULTAD,FACULTAD,TITULO_EXALUMNO,TITULO_ESCUELA WHERE ESCUELA_FACULTAD. ID_FACULTAD=FACULTAD.ID_FACULTAD AND ESCUELA_FACULTAD.ID_ESCUELA=TITULO_ESCUELA.ID_ESCUELA AND TITULO_ESCUELA.ID_TITULO=TITULO_EXALUMNO.ID_TITULO) GROUP BY FACULTAD) NATURAL FULL OUTER JOIN (SELECT FACULTAD,COUNT(CEDULA) CONTACTADOS FROM (SELECT FACULTAD.NOMBRE FACULTAD, TITULO_EXALUMNO.CEDULA CEDULA FROM ESCUELA_FACULTAD,FACULTAD,TITULO_EXALUMNO,TITULO_ESCUELA,METODO WHERE ESCUELA_FACULTAD. ID_FACULTAD=FACULTAD.ID_FACULTAD AND ESCUELA_FACULTAD.ID_ESCUELA=TITULO_ESCUELA.ID_ESCUELA AND TITULO_ESCUELA.ID_TITULO=TITULO_EXALUMNO.ID_TITULO AND TITULO_EXALUMNO.CEDULA=METODO.CEDULA AND CONTACTO=1 ) GROUP BY FACULTAD) NATURAL FULL OUTER JOIN(SELECT FACULTAD,COUNT(CEDULA) ENCUESTADOS FROM (SELECT FACULTAD.NOMBRE FACULTAD,TITULO_EXALUMNO.CEDULA CEDULA FROM ESCUELA_FACULTAD,FACULTAD,TITULO_EXALUMNO,TITULO_ESCUELA,EXALUMNO_ENCUESTAE WHERE  ESCUELA_FACULTAD. ID_FACULTAD=FACULTAD.ID_FACULTAD AND ESCUELA_FACULTAD.ID_ESCUELA=TITULO_ESCUELA.ID_ESCUELA AND TITULO_ESCUELA.ID_TITULO=TITULO_EXALUMNO.ID_TITULO AND TITULO_EXALUMNO.CEDULA=EXALUMNO_ENCUESTAE.CEDULA_EXALUMNO ) GROUP BY FACULTAD) ORDER BY FACULTAD,NUM_ESTUDIANTES";
        ResultSet resultado=stmt.executeQuery(consulta);
        while (resultado.next())
        {
            contactados=getDecimal(2,resultado.getDouble("E_CONTACTADOS"));
            encuestados=getDecimal(2,resultado.getDouble("ENCUESTADOS"));
            Object nuevo[]={resultado.getString("FACULTAD"),resultado.getString("NUM_ESTUDIANTES"),contactados,encuestados};
            modelo.addRow(nuevo);
        }
        db.getConnection().close();
        return modelo;
    }
    
    
    public double getDecimal(int numeroDecimales,double decimal){
        decimal = decimal*(java.lang.Math.pow(10, numeroDecimales));
        decimal = java.lang.Math.round(decimal);
        decimal = decimal/java.lang.Math.pow(10, numeroDecimales);

        return decimal;  }
}
